Go日常食用之读取yml配置文件

3,238次阅读
一条评论

共计 1584 个字符,预计需要花费 4 分钟才能阅读完成。

前言

在日常开发中,免不了读取各种各样的配置文件,比如 json、yml、properties、env、ini 等等格式的配置文件,今天我们将介绍在 Go 里面如何读取 yml 配置文件,并且根据不同的环境读取不同的配置~

准备

首先我们需要准备一份.yml 的配置文件,这里简单贴出一份(取名为app.yml):

# app.yml
app:
  id: 1000
  name: juejin
db:
  name: test
  username: root
  password: 123456
  port: 3306
ticks:
  - 100
  - 200
  - 300
maps:
  1: 一
  2: 二
  3: 三

定义结构

配置文件定义好了,我们就需要根据配置文件的结构来定义 go 语言的结构体:

type App struct {
    Id   int
    Name string
}

type DB struct {
    Name     string
    Username string
    Password string
    Port     int
}

type AppConfig struct {
    App   App
    DB    DB
    Ticks []int
    Maps  map[int]string
}

读取

接下来就开始读取 yml 配置数据,这里我们需要用到一个依赖库:github.com/spf13/viper 来读取我们的 yml 文件,具体方法步骤如下:

func main() {wd, err := os.Getwd()
    if err != nil {panic(err)
    }
    c := &AppConfig{}
    v := viper.New()
    v.SetConfigName("app") // 这里就是上面我们配置的文件名称,不需要带后缀名
    v.AddConfigPath(wd) // 文件所在的目录路径
    v.SetConfigType("yml") // 这里是文件格式类型
    err = v.ReadInConfig()
    if err != nil {log.Fatal("读取配置文件失败:", err)
        return
    }
    configs := v.AllSettings()
    for k, val := range configs {v.SetDefault(k, val)
    }
    err = v.Unmarshal(c) // 反序列化至结构体
    if err != nil {log.Fatal("读取配置错误:", err)
    }
}

多环境配置

在开发过程中,免不了多环境的切换,例如开发环境和测试环境的配置可能会有一些不同,不过每次都去改默认配置文件太麻烦了,不过我们可以设置环境变量以适配多环境的配置读取,最终代码为:

func main() {wd, err := os.Getwd()
    if err != nil {panic(err)
    }
    c := &AppConfig{}
    v := viper.New()
    v.SetConfigName("app")
    v.AddConfigPath(wd)
    v.SetConfigType("yml")
    err = v.ReadInConfig()
    if err != nil {log.Fatal("读取配置文件失败:", err)
        return
    }
    configs := v.AllSettings()
    for k, val := range configs {v.SetDefault(k, val)
    }
    pa := os.Getenv("PROFILE_ACTIVE") // 读取环境变量中设置的当前生效配置名称
    if pa != "" {v.SetConfigName(pa)
        v.AddConfigPath(wd)
        v.SetConfigType("yml")
        err = v.ReadInConfig()
        if err != nil {return}
    }
    err = v.Unmarshal(c)
    if err != nil {log.Fatal("读取配置错误:", err)
    }
}

后记

以上的方法都是基础简单的业务配置,且 viper 依赖也支持更多配置读取,如:JSON, TOML, YAML, HCL, envfile and Java properties;

😊 最后,感谢您的阅读,谢谢!

正文完
使用官方微信小程序体验更多功能
post-qrcode
 8
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 于2021-03-24发表,共计1584字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
今日新闻 评论达人 LV.1
2021-04-29 00:28:18 回复

文章不错支持一下吧

 Windows  Chrome  中国广西贺州市联通

憧憬点滴记忆

公告
Puock是一款基于WordPress开发的高颜值自适应开源主题,支持白天与黑夜模式、无刷新加载等功能。
文章搜索
憧憬点滴记忆
憧憬点滴记忆
Licoy's Blog关注互联网及软件IT技术的个人博客
今日一言
-「
热门文章
《活着》 – 人所体现生命的价值

《活着》 – 人所体现生命的价值

前言 在新年目标中为了定了一个读书计划,计划在 18 年中阅读 20 本各方面的书籍,目前阅读计划已经阅读了两...
Chatroulette-全世界随机视频聊天网站

Chatroulette-全世界随机视频聊天网站

介绍 Chatroulette 被人们叫做“聊天轮盘”是由一个 17 岁俄国高中生创立的随机视频聊天网站。该网...
Puock主题常见问题汇总

Puock主题常见问题汇总

前言 最近经常会收到小伙伴的一些老生常谈过的的问题,鉴于有些小伙伴因为网络原因无法及时访问到 Github 上...
SpringCloud使用Zuul出现“Forwarding error”错误解决方法

SpringCloud使用Zuul出现“Forwarding error”错误解决方法

起因 博主在使用 zuul 的时候,所有的配置都是配置完全了的,但是只要一访问服务就出现 500,然后查看控制...
岛屿数量计算中的DFS和BFS的应用

岛屿数量计算中的DFS和BFS的应用

前言 计算岛屿数量是在由 ’0’ 与 ’1’ 的二维网格中寻找...
最新评论
憧憬Licoy 憧憬Licoy 暂时不做友联申请了
憧憬Licoy 憧憬Licoy 暂时不做友联申请了
YanQS YanQS 名称:YanQS's Blog 网址:https://yanqs.me/
ygtg ygtg 很好 :beer:
ssdfg ssdfg 用户中心太简陋了! :grin:
mp4网 mp4网 申请友链 名称:mp4网 地址:http://mp4wang.cc 描述:多来看看
xf xf 感谢作者的分享
朵朵 朵朵 过来看看
热评文章